package org.huangrui.spark.java.sql;

import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.SparkSession;

import static org.apache.spark.sql.functions.udaf;

/**
 * @Author hr
 * @Create 2024-10-20 17:22
 */
public class SparkSQL03_SQL_UDAF {
    public static void main(String[] args) {
        SparkSession spark = SparkSession.builder().appName("SparkSQL03_SQL_UDAF").master("local[*]").getOrCreate();
        spark.read().json("data/user.json").createOrReplaceTempView("user");

        // TODO SparkSQL采用特殊的方式将UDAF转换成UDF使用
        //      UDAF使用时需要创建自定义聚合对象
        //        udaf方法需要传递2个参数
        //             第一个参数表示UDAF对象
        //             第二个参数表示UDAF对象对应的Encoder对象
        spark.udf().register("ageAvg", udaf(new MyAvgAgeUDAF(), Encoders.LONG()));

        spark.sql("select ageAvg(age) from user").show();

        spark.stop();
    }

}
